@火凤凰
2年前 提问
1个回答

拒绝服务攻击有哪些方式

Andrew
2年前

拒绝服务攻击有以下方式:

  • SYN Foold攻击:是利用TCP协议的特性发动的,通过发送大量伪造的带有SYN标志位的TCP报文使目标服务器连接耗尽,达到拒绝服务的目的。通过不停的循环讲伪造好的数据包发送 到目的服务器。可以看到目标主机建立了很多虚假的半开连接,这耗费了目标主机大量的 连接资源。可以想象如果成千上万台“肉鸡”对一台服务器发动synflood攻击威力将是非常强大。

  • ACK FLOOD攻击:是利用TCP三次握手的缺陷实现的攻击,攻击主机伪造海量的虚假ack包发送给目标主机,目标主机每收到一个带有ack标志位的数据包时,都会去自己的TCP连接表中查看有没有与ack的发送者建立连接,如果有则发送三次握手的第三段ack+seq完成三次握手,成功建立TCP连接。如果没有则发送ack+rst断开连接。但是在这个过程中会消耗一定的CPU计算资源

  • CC攻击:CC攻击的原理是通过代理服务器或者大量“肉鸡”模拟多个用户访问目标网站的动态页面,制造大量的后台数据库查询动作,消耗目标CPU资源,造成拒绝服务。 CC攻击全称ChallengeCollapsar,中文意思是挑战黑洞,因为以前的抗DDOS攻击的安全设备叫黑洞,顾名思义挑战黑洞就是说黑洞拿这种攻击没办法,新一代的抗DDOS设备已经改名为ADS( Anti-DDoS System),基本上已经可以完美的抵御CC攻击了。

  • UDP FLOOD攻击:UDP攻击,又称UDP洪水攻击或UDP淹没攻击顾名思义是利用UDP协议进行攻击的,UDP FLOOD攻击可以是小数据包冲击设备也可以是大数据包阻塞链路占尽带宽。不过两种方式的实现很相似,差别就在UDP的数据部分带有多少数据。相比TCP协议的攻击UDP的攻击更直接更好理解,有一定规模之后更难防御,因为UDP攻击的特点就是打出很高的流量。

  • 反射DDOS:很多协议的请求包要远小于回复包,以一个字节的数据换十个字节的数据回来这就是一种放大,但是你这单纯的放大攻击的是自己,所以说想要攻击别人就要在发送请求包时把源地址写成要攻击的人的地址,这样回复的大字节报文就去你要攻击的人那里了。这里放大主要利用的是NTP的monlist(listpeers也行)、DNS的AXFR(ANY也行)、SNMP的getbulkrequest。monlist是返回最近600个与当前NTP服务器通信过的IP地址;AXFR是区域传送(有地方叫域传送),比如freebuf.com下的所有域名返回给请求者;SNMPV2版本中新加的getbulkrequest用于一次请求大量的信息,减少管理站与被管理设备的交互次数。

  • Websocket攻击:websocket是HTML5一种新的协议,它实现了浏览器与服务器全双工通信(full-duple)。目前主流的浏览器都能很好地支持websocket,而且用它实现DOS攻击也并不是很难,只要在js代码中写入相应的代码,当人们打开这个网页时浏览器会自动执行js代码去请求连接要攻击的IP地址。

  • 临时透镜攻击:这种攻击是一种典型的通过时间延时进行流量放大攻击的方法。如果攻击者可以控制多个时间段的多个数据包,让它们同时到达目标,这样就能使流量瞬间到达一个峰值,对目标造成很大危害。这个攻击方式道理不难理解,但是实现起来可是不容易,要让相同源和目的IP的IP报文走不同的路径到达目的地,这一点就是要实现临时透镜攻击的关键所在,我国的互联网基本上是由四张网(电信、联通、移动、教育网)通过互联互通组成的,任意两点之间的路径都能有千千万万条,但是怎么才能有我们自己控制报文的路线呢?我想到的第一个办法就是用IP协议的宽松源路由选项,学过或者平时比较了解TCP/IP的童鞋们可能听说过这个宽松源路由,但我估计很少有人用。IP数据在传输时通常由路由器自动为其选择路由,但是网络工程师为了使数据绕开出错网络或者为了测试特定线路的吞吐率,需要在信源出控制IP数据报的传输路径,源路由就是为了满足这个要求设计的。源路由有两种,一种叫严格源路由另一种就是我们要说的宽松源路由。IP选项部分可以最多带上9个IP地址作为这个数据报要走的路径,严格源路由是每一跳都必须按照指定的路由器去走,但是宽松源路由的不用这么严格。我国大部分运营商都禁止了源路由,不过有人说在国外不禁止源路由,国外有服务器的朋友可以去测试一下是不是真的。

  • 慢速DDOS攻击:一说起慢速攻击,就要谈谈它的成名历史了。HTTP Post慢速DoS攻击第一次在技术社区被正式披露是2012年的OWASP大会上,由Wong Onn Chee和Tom Brennan共同演示了使用这一技术攻击的威力。对任何一个开放了HTTP访问的服务器HTTP服务器,先建立了一个连接,指定一个比较大的content-length,然后以非常低的速度发包,比如1-10s发一个字节,然后维持住这个连接不断开。如果客户端持续建立这样的连接,那么服务器上可用的连接将一点一点被占满,从而导致拒绝服务。和CC攻击一样,只要Web服务器开放了Web服务,那么它就可以是一个靶子,HTTP协议在接收到request之前是不对请求内容作校验的,所以即使你的Web应用没有可用的form表单,这个攻击一样有效。在客户端以单线程方式建立较大数量的无用连接,并保持持续发包的代价非常的低廉。实际试验中一台普通PC可以建立的连接在3000个以上。这对一台普通的Web server将是致命的打击。更不用说结合肉鸡群做分布式DoS了。鉴于此攻击简单的利用程度、拒绝服务的后果、带有逃逸特性的攻击方式,这类攻击一炮而红,成为众多攻击者的研究和利用对象。发展到今天,慢速攻击也多种多样。

  • ReDoS攻击:ReDoS(Regular expression Denial of Service)正则表达式拒绝服务攻击。开发人员使用了正则表达式来对用户输入的数据进行有效性校验,当编写校验的正则表达式存在缺陷或者不严谨时, 攻击者可以构造特殊的字符串来大量消耗服务器的系统资源,造成服务器的服务中断或停止。正则表达式引擎分成两类,一类称为DFA(确定性有限状态自动机),另一类称为NFA(非确定性有限状态自动机)。两类引擎要顺利工作,都必须有一个正则式和一个文本串,一个捏在手里,一个吃下去。DFA捏着文本串去比较正则式,看到一个子正则式,就把可能的匹配串全标注出来,然后再看正则式的下一个部分,根据新的匹配结果更新标注。而NFA是捏着正则式去比文本,吃掉一个字符,就把它跟正则式比较,然后接着往下干。一旦不匹配,就把刚吃的这个字符吐出来,一个一个吐,直到回到上一次匹配的地方。

防御该攻击的办法有以下这些:

  • 前端代理:我们可为静态资源准备多个站点做冗余备份,当Service Worker加载资源出错时,可不返回错误给上层页面,而是继续从备用站点加载,直到获得正确结果才返回。这样,只要有一个备用站点可用,资源就不会加载失败。

  • 离线访问:Service Worker 的设计初衷就是为了增强网页的离线化体验,因此一旦安装即可在后台长期运行,即使服务器关机、浏览器重启,它也不会失效。

  • 免费节点:使用冗余站点虽能提升稳定性,但攻击者仍可对备用站点发起攻击,尤其是恶意消耗流量费用的攻击,导致成本大幅上升。为此,我们还可使用一种更极端的方案使用免费 CDN 作为备用站点,例如 jsdelivr.net、unpkg.com、IPFS Gateway 等等,图片则可上传到各大网站的相册。

  • 接口防御:对于纯静态资源的站点,我们可将所有资源甚至包含 HTML 文件都通过免费 CDN 加速,从而大幅降低成本、增加稳定性。